﻿using System;
using JetBrains.Annotations;

namespace Rsdn.Janus
{
    public interface IFormatMessageHelperService
    {
        /// <summary>
        /// Форматирует оценки.
        /// </summary>
        /// <param name="rate">Сумма оценок.</param>
        /// <param name="smile">Количество улыбок.</param>
        /// <param name="agree">Количество согласных.</param>
        /// <param name="disagree">Количество не согласных.</param>
        /// <returns>Форматированное представление оценок.</returns>
        string FormatRates(int rate, int smile, int agree, int disagree);

        /// <summary>
        /// Возвращает первое не пустое значение, 
        /// иначе - Аноним
        /// </summary>
        /// <param name="nick">Псевдоним пользователя.</param>
        /// <param name="realName">Реальное имя пользователя.</param>
        /// <param name="userName">Имя пользователя.</param>
        /// <returns>Первое не пустое "имя" пользователя, иначе - Аноним.</returns>
        string GetUserDisplayName(string nick, string realName, string userName);

        /// <summary>
        /// Преобразовывает тип пользователя в строку.
        /// </summary>
        /// <param name="userClass">Тип пользователя. <see cref="UserClass"/></param>
        /// <param name="isHtml">Использовать подсветку.</param>
        /// <returns>Строковое представление ипа пользователя.</returns>
        string FormatUserClass(UserClass userClass, bool isHtml);

        /// <summary>
        /// Форматирует тултип сообщения, указывая на тему, автора и дату постинга.
        /// </summary>
        /// <param name="subject">The subject.</param>
        /// <param name="date">The date.</param>
        /// <param name="nick">The nick.</param>
        /// <returns>Тултип сообщения.</returns>
        [NotNull]
        string FormatMsgLinkTitle(string subject, DateTime date, string nick);

        /// <summary>
        /// Возвращает дату в виде строки
        /// Формат даты задется в настройках
        /// Время перводится в локальное компьютера
        /// Время на Rsdn Московское +3 GMT
        /// </summary>
        /// <param name="date">Входная дата.</param>
        /// <returns>дата в заданном формате</returns>
        string GetDateAsString(DateTime date);

        /// <summary>
        /// Следующие пара методов выдернуты из исходников IT (с заметными доработками правда),
        /// так что все возможные вопросы к нему
        /// Перенес из MessageUtilities
        /// </summary>
        /// <param name="subjIn">The subj in.</param>
        /// <returns></returns>
        string ReSubj(string subjIn);
    }
}